import org.junit.Test;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static java.lang.Class.forName;

public class PsCURD {
    @Test
    public void testInsert() throws ClassNotFoundException, SQLException {
        //插入一条数据

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
//        2.获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu_test", "root", "123123");

//                * 3.创建SQL语句结果，动态值的部分使用？代替
        String sql = "insert into test(account, password, nickname) values(?,?,?);";

//                * 4.创建preparedStatement， 并传入SQL语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
//                * 5.占位符赋值
        preparedStatement.setObject(1,"Mike");
        preparedStatement.setObject(2,"abcdefg");
        preparedStatement.setObject(3,"Little Mike");
//                * 6.发送SQL语句
        //DML类型
        int rows = preparedStatement.executeUpdate();
//                * 7.输出结果
        if(rows > 0) {
            System.out.println("插入成功");
        }else {
            System.out.println("插入失败");
        }
//                *8、关闭资源
        preparedStatement.close();
        connection.close();
    }
    @Test
    public void testUpdate() throws ClassNotFoundException, SQLException {
        //修改数据库中内容
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
//        2.获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu_test", "root", "123123");

//                * 3.创建SQL语句结果，动态值的部分使用？代替
        String sql = "update test set nickname=? where account=?;";

//                * 4.创建preparedStatement， 并传入SQL语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
//                * 5.占位符赋值
        preparedStatement.setObject(1,"mike");
        preparedStatement.setObject(2,"Mike");
//                * 6.发送SQL语句
        //DML类型
        int rows = preparedStatement.executeUpdate();
//                * 7.输出结果
        System.out.println(preparedStatement);
        if(rows > 0) {
            System.out.println("修改成功");
        }else {
            System.out.println("修改失败");
        }
//                *8、关闭资源
        preparedStatement.close();
        connection.close();


    }
    @Test
    public void testDelete() throws ClassNotFoundException, SQLException {
        //修改数据库中内容
        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
//        2.获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu_test", "root", "123123");

//                * 3.创建SQL语句结果，动态值的部分使用？代替
        String sql = "delete from test where account=?;";

//                * 4.创建preparedStatement， 并传入SQL语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
//                * 5.占位符赋值
        preparedStatement.setObject(1,"John");
//                * 6.发送SQL语句
        //DML类型
        int rows = preparedStatement.executeUpdate();
//                * 7.输出结果
        System.out.println(preparedStatement);
        if(rows > 0) {
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }
//                *8、关闭资源
        preparedStatement.close();
        connection.close();
    }
    @Test
    public void testSelect() throws ClassNotFoundException, SQLException {
        //查询数据，封装到List<Map> list中
        /*
        * 实现思路：遍历行数据，一行对应一个map，获取一行的列名和对应的属性，装配即可，将map装到一个集合
         */

        //1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
//        2.获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///atguigu_test", "root", "123123");

//                * 3.创建SQL语句结果，动态值的部分使用？代替
        String sql = "SELECT * from test;";

//                * 4.创建preparedStatement， 并传入SQL语句
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
//                * 5.占位符赋值
//        preparedStatement.setObject(1,"Mike");
//        preparedStatement.setObject(2,"abcdefg");
//        preparedStatement.setObject(3,"Little Mike");
//                * 6.发送SQL语句
        //DML类型
        ResultSet resultSet = preparedStatement.executeQuery();
        List<Map> list = new ArrayList<>();
        //获取列的信息
        ResultSetMetaData metaData = resultSet.getMetaData();
        int columnCount = metaData.getColumnCount();
        while(resultSet.next()) {
            Map map = new HashMap();
            //一行数据对应一个map
            for(int i=1;i<=columnCount;i++) {
               Object value = resultSet.getObject(i);
               map.put(metaData.getColumnLabel(i), value);
            }
//            map.put("account", resultSet.getString("account"));
//            map.put("password", resultSet.getString("password"));
//            map.put("nickname", resultSet.getString("nickname"));
            list.add(map);
        }
//                * 7.输出结果
        System.out.println(list);
//        if(rows > 0) {
//            System.out.println("插入成功");
//        }else {
//            System.out.println("插入失败");
//        }
//                *8、关闭资源
        preparedStatement.close();
        connection.close();

    }

}
